package cn.kattomy.shop.product.dao;

import java.util.List;

import cn.kattomy.shop.image.vo.Image;
import cn.kattomy.shop.product.vo.Product;
import cn.kattomy.shop.utils.PageBean;

public interface ProductDao {

	/**
	 * 查询最新前十的热门商品 
	 * @return 前十个热门商品 Product 组成的 List 集合
	 */
	public List<Product> queryHotProduct();
	
	/**
	 * 查询最新前十的商品 
	 * @return 最新的前十个商品 Product 组成的 List 集合
	 */
	public List<Product> queryNewProduct();

	/**
	 * 根据传入的 Pid 从数据库中查询对应的 Product 商品对象
	 * @param pid
	 * @return 与传入 Pid 相匹配的 Product 商品对象
	 */
	public Product queryByPid(Integer pid);

	/**
	 * 根据传入的 一级分类 cid 获取该一级分类下的商品总数
	 * @param cid 传入的一级分类 cid
	 * @return 对应一级分类下商品的总数
	 */
	public int findCountByCid(Integer cid);

	/**
	 * 根据传入的 cid,begin,PageSize 进行分页查询
	 * @param cid 传入的一级分类 cid
	 * @param begin 起始位置,用于确定各个分页的起始位置
	 * @param PageSize 各个分页显示项目条数
	 * @return 商品组成的 List 集合,集合的 size 即为传入的 PageSize
	 */
	public List<Product> findByPageCid(Integer cid, int begin, int PageSize);

	/**
	 * 根据传入的二级分类 csid 获取该一级分类下的商品总数
	 * @param csid 传入的二级分类 csid
	 * @return 对应二级分类下的商品总数
	 */
	public int findCountByCsid(Integer csid);

	/**
	 * 根据传入的 csid,begin,PageSize 进行分页查询
	 * @param csid 传入的二级分类 csid
	 * @param begin 起始位置,用于确定各个分页的起始位置
	 * @param pageSize 各个分页显示项目条数
	 * @return 商品组成的 List 集合,集合的 size 即为传入的 pageSize
	 */
	public List<Product> findByPageCsid(Integer csid, int begin, int pageSize);

	/**
	 * 统计所有商品个数
	 * @return 所有商品个数
	 */
	public int findCount();

	/**
	 * 根据传入的 begin,PageSize 进行分页查询
	 * @param begin 起始位置，用于确定各分页的起始位置
	 * @param pageSize 各个分页显示项目条数
	 * @return  所有商品组成的 List 集合
	 */
	public List<Product> findByPageNo(int begin, int pageSize);

	/**
	 * 保存传入的 product 对象
	 */
	public void save(Product product);

	/**
	 * 删除数据库中与传入对象对应的 product
	 * @param product
	 */
	public void delete(Product product);

	/**
	 * 修改数据库中与传入对象对应的 product
	 * @param product
	 */
	public void update(Product product);

	public List<Product> findAll();

	public void saveImage(Image image);

	public double findImageCount();

	public PageBean<Product> searchByKeyword(String keyword, Integer pageNo);
	
	public void createIndex();
}
